package com.order.controller;

import com.order.service.TravelRequestService;
import com.usian.order.Order;
import com.usian.order.Order_Take;
import com.usian.order.TravelRequest;
import com.usian.travelSchedule.TravelSchedule;
import com.usian.vo.ResultVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

/**
 * 旅行请求控制器类，用于处理与旅行请求相关的HTTP请求
 */
@RestController
@RequestMapping("/app/order/travel")
public class TravelRequestController {

    @Autowired
    private TravelRequestService travelRequestService;

    /**
     * 根据用户ID和订单状态获取旅行请求信息
     *
     * @param id 用户ID
     * @param status 订单状态
     * @return 包含旅行请求信息的ResultVo对象
     */
    @GetMapping("/{id}/{status}")
    /**
     * 根据ID和状态获取旅行请求
     *
     * @param id 旅行请求的ID，用于标识特定的旅行请求
     * @param status 旅行请求的状态，用于过滤旅行请求
     * @return 返回包含旅行请求列表的ResultVo对象，如果参数为空或状态不匹配，则可能返回错误或空
     */
    public ResultVo getTravelRequestById(@PathVariable Integer id, @PathVariable Integer status) {
        // 检查参数是否为空
        if (id == null || status == null) {
            return ResultVo.error();
        }

        // 处理 status 的转换
        status = status == 0 ? 1 : 2;
        if (status == 1){
            //获取旅行请求列表
            List<TravelSchedule> travelRequestList = travelRequestService.selectTravelRequest(id);
            // 检查旅行请求列表是否不为空
            if (travelRequestList.size()>0){
                // 遍历旅行请求列表中的每个旅行计划
                for (TravelSchedule travelSchedule : travelRequestList) {
                    // 调用服务方法获取用户的订单状态
                    Order orderList = travelRequestService.selectTravelOrderStatus(travelSchedule.getUserId(),travelSchedule.getId());
                    // 如果订单状态不为空，则设置旅行计划的订单状态为获取到的状态
                    if (orderList!=null){
                        travelSchedule.setOrderstatus(orderList.getOrderStatus());
                    }else {
                        // 如果订单状态为空，则默认设置旅行计划的订单状态为1
                        travelSchedule.setOrderstatus(1);
                    }
                }
            }
            return ResultVo.ok(travelRequestList);
        }else {
            return ResultVo.error();
        }
    }


    /**
     * 查看旅行请求信息
     *
     * @param id 用户ID
     * @param status 订单状态
     * @return 包含旅行请求信息的ResultVo对象
     */
    @GetMapping("/lookup/{id}/{status}")
    public ResultVo lookupTravelRequestById(@PathVariable Integer id,@PathVariable Integer status){
        /**
         * 根据ID和状态获取旅行请求列表
         * 此方法首先检查传入的ID和状态是否为空，如果任一参数为空，则返回错误信息
         * 如果参数有效，调用服务层方法获取相应的旅行请求列表，并将其封装在成功的结果对象中返回
         *
         * @param id 旅行请求的ID，用于查询特定的旅行请求
         * @param status 旅行请求的状态，用于过滤特定状态的旅行请求
         * @return 如果查询参数为空，则返回错误的ResultVo对象；否则返回包含查询到的旅行请求列表的ResultVo对象
         */
        if (id==null||status==null){
            // 当ID或状态为空时，返回错误结果
            return ResultVo.error();
        }
        // 调用服务层方法，查询并获取旅行请求列表
        List<TravelSchedule> travelRequestList=travelRequestService.selectlookupTravelRequest(id,status);
        // 返回成功结果，包含查询到的旅行请求列表
        return ResultVo.ok(travelRequestList);

    }
    @GetMapping("/ok/{id}/{userid}")
    public ResultVo ok(@PathVariable Integer id,@PathVariable Integer userid){
        return ResultVo.ok(travelRequestService.uporderstatus(id,userid));
    }
}
